﻿using System;
using System.Linq;
using System.Web.Mvc;
using web_uchet.ViewModels;
using Mvc.Validation;

namespace web_uchet.Controllers
{
    public class OrderDetailsController : MasterPageController
    {
        private ViewДеталь_ЗаказаOperationProvider _Provider;
        public OrderDetailsController()
        {
            this._Provider = new ViewДеталь_ЗаказаOperationProvider(this._MasterData);  
            
        }
        public OrderDetailsController(ViewДеталь_ЗаказаOperationProvider Provider)
        {
            this._Provider = Provider;
        }
        //
        // GET: /OrderDetails/
        /// <summary>
        /// 
        /// </summary>
        /// <param name="undefined">ID заказа для получения деталей, undefined почему то а не id шлет jqgrid</param>
        /// <returns></returns>
        public ActionResult IndexSub(Int64? undefined)
        {
            var data= this._Provider.List(undefined.Value,true);
            var Result = new
            {
                total = data.Count(),
                page = 1,
                records = data.Count(),
                rows = (from e in data
                        select new
                        {
                            id = e.ИД_Детали,
                            cell = new object[]
                            { //Услуга = 
                                e.Услуга_Компании.Название, 
                                //Цена = 
                                e.Цена_Услуги + " " + e.Валюта_Услуги.Символ,
                                //Колличество = 
                                e.Колличество_Услуги, 
                                //Описание = 
                                e.Описание_Услуги 
                            }
                        }).ToArray()
            };
            return Json(Result,JsonRequestBehavior.AllowGet);
        }
        public ActionResult Index(Int64? id)
        {
            if (id.HasValue)
            {
                var Result = this._Provider.List(id.Value,true);

                //converting in grid format
                var result = new
                {
                    total = Result.Count(),
                    page = 1,
                    records = Result.Count(),
                    rows = (from Деталь in Result
                            select new
                            {
                                id = Деталь.ИД_Детали,
                                cell = new object[]
                                  {
                                        //ИД_Заказа_Детали
                                        Деталь.ИД_Заказа_Детали,
                                        //ИД_Услуги
                                        Деталь.Услуга_Компании.Название, 
                                        //Цена_Услуги
                                        Деталь.Цена_Услуги,
                                        //ИД_Валюты_Услуги = 
                                        Деталь.Валюта_Услуги.Название, 
                                        //Колличество_Услуги = 
                                        Деталь.Колличество_Услуги, 
                                        //Описание_Услуги = 
                                        Деталь.Описание_Услуги
                                  }
                            }).ToArray()
                };

                //convert to JSON and return to client
                return Json(result, JsonRequestBehavior.AllowGet);
            }
            else return new EmptyResult();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id">id of OrderDetail</param>
        /// <param name="oper">edit,add,del</param>
        /// <param name="EditObject"></param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult MultyAction(Int64? id, string oper, ViewДеталь_Заказа Object)
        {
            try
            {                
                switch (oper)
                {
                    case "add":
                        Object.Validate();
                        this._Provider.Create(Object);
                        return new EmptyResult();                
                        break;
                    case "edit":
                        Object.Validate();
                        this._Provider.Update(this._Provider.Details(id.Value), Object);                   
                        return new EmptyResult();
                        break;
                    case "del":
                        this._Provider.Delete(id.Value);
                        return new EmptyResult();
                        break;
                    default:
                        return new EmptyResult();
                        break;

                }                
            }
            catch (EntityValidationException ex)
            {
                //ViewData.ModelState.PopulateWithErrors(ex);
                Response.StatusCode = 500;
                return new EmptyResult();
                //return this.Content(ex.Errors.TransToString(true));
            }
        }
    }
}
